刚刚看了下Intel的白皮书,在书中有这么一段话:
For expand-down data segments, the segment limit has the same function but is interpreted differently. Here, the effective limit specifies the last address that is not allowed to be accessed within the segment; the range of valid offset is from (Effective-limit + 1) to FFFFFFFFH if the B is set and from (effective-limit + 1) to FFFFH is the B is clear; An expand-down segment has maximum size when the segment limit is 0.
这应该是最权威的解释了,还是以2000h为例,5的limit,16位段,那么内存布局应该如下:
0 <-------- 低地址
0x2000h <-------- ........ 0x2005h <-------- Effective-Limit => Base+Limit ........ ........ 0xffff <-------- 高地址
那么这个段的有效地址范围应该为 0x2006h~0xffffh,也即Limit的有效范围是从Limit+1~1M-1,当然,所生成的线性地址应该在2006h到1m-1的范围内。
对于这个问题,我只有一个疑惑了,为什么要从Limit+1开始,这说明这个区域的可访问内存因该是从:0x2006h~0xffffH,0x2005那个位置为什么不允许访问??
谢谢
|